home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / parted / disk.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  9KB  |  243 lines

  1. /*
  2.     libparted - a library for manipulating disk partitions
  3.     Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  18. */
  19.  
  20. #ifndef PED_DISK_H_INCLUDED
  21. #define PED_DISK_H_INCLUDED
  22.  
  23. typedef struct _PedDisk            PedDisk;
  24. typedef struct _PedPartition        PedPartition;
  25. typedef const struct _PedDiskOps    PedDiskOps;
  26. typedef struct _PedDiskType        PedDiskType;
  27. typedef const struct _PedDiskArchOps    PedDiskArchOps;
  28.  
  29. #include <parted/device.h>
  30. #include <parted/filesys.h>
  31. #include <parted/natmath.h>
  32. #include <parted/geom.h>
  33.  
  34. typedef enum {
  35.     PED_PARTITION_NORMAL        = 0x00,
  36.     PED_PARTITION_LOGICAL        = 0x01,
  37.     PED_PARTITION_EXTENDED        = 0x02,
  38.     PED_PARTITION_FREESPACE        = 0x04,
  39.     PED_PARTITION_METADATA        = 0x08,
  40.     PED_PARTITION_PROTECTED        = 0x10
  41. } PedPartitionType;
  42.  
  43. typedef enum {
  44.     PED_PARTITION_BOOT=1,
  45.     PED_PARTITION_ROOT=2,
  46.     PED_PARTITION_SWAP=3,
  47.     PED_PARTITION_HIDDEN=4,
  48.     PED_PARTITION_RAID=5,
  49.     PED_PARTITION_LVM=6,
  50.     PED_PARTITION_LBA=7,
  51.     PED_PARTITION_HPSERVICE=8,
  52.     PED_PARTITION_PALO=9,
  53.     PED_PARTITION_PREP=10,
  54.     PED_PARTITION_MSFT_RESERVED=11
  55. } PedPartitionFlag;
  56. #define PED_PARTITION_FIRST_FLAG    PED_PARTITION_BOOT
  57. #define PED_PARTITION_LAST_FLAG        PED_PARTITION_MSFT_RESERVED
  58.  
  59. typedef enum {
  60.     PED_DISK_TYPE_EXTENDED=1,    /* supports extended partitions */
  61.     PED_DISK_TYPE_PARTITION_NAME=2    /* supports partition names */
  62. } PedDiskTypeFeature;
  63. #define PED_DISK_TYPE_FIRST_FEATURE    PED_DISK_TYPE_EXTENDED
  64. #define PED_DISK_TYPE_LAST_FEATURE     PED_DISK_TYPE_PARTITION_NAME
  65.  
  66. struct _PedPartition {
  67.     PedPartition*        prev;
  68.     PedPartition*        next;
  69.  
  70.     PedDisk*        disk;
  71.     PedGeometry        geom;
  72.     int            num;
  73.  
  74.     PedPartitionType    type;
  75.     const PedFileSystemType* fs_type;
  76.     PedPartition*        part_list;    /* for extended partitions */
  77.  
  78.     void*            disk_specific;
  79. };
  80.  
  81. struct _PedDisk {
  82.     PedDevice*        dev;
  83.     const PedDiskType*    type;
  84.     PedPartition*        part_list;
  85.  
  86.     void*            disk_specific;
  87.  
  88. /* office use only ;-) */
  89.     int            needs_clobber;    /* clobber before write? */
  90.     int            update_mode;    /* mode without free/metadata
  91.                            partitions, for easier
  92.                            update */
  93. };
  94.  
  95. struct _PedDiskOps {
  96.     /* disk label operations */
  97.     int (*probe) (PedDevice *dev);
  98.     int (*clobber) (PedDevice* dev);
  99.     PedDisk* (*alloc) (PedDevice* dev);
  100.     PedDisk* (*duplicate) (const PedDisk* disk);
  101.     void (*free) (PedDisk* disk);
  102.     int (*read) (PedDisk* disk);
  103.     int (*write) (PedDisk* disk);
  104.  
  105.     /* partition operations */
  106.     PedPartition* (*partition_new) (
  107.         const PedDisk* disk,
  108.                PedPartitionType part_type,
  109.         const PedFileSystemType* fs_type,
  110.         PedSector start,
  111.         PedSector end);
  112.     PedPartition* (*partition_duplicate) (const PedPartition* part);
  113.     void (*partition_destroy) (PedPartition* part);
  114.     int (*partition_set_system) (PedPartition* part,
  115.                      const PedFileSystemType* fs_type);
  116.     int (*partition_set_flag) (
  117.         PedPartition* part,
  118.                PedPartitionFlag flag,
  119.         int state);
  120.     int (*partition_get_flag) (
  121.         const PedPartition* part,
  122.         PedPartitionFlag flag);
  123.     int (*partition_is_flag_available) (
  124.         const PedPartition* part,
  125.         PedPartitionFlag flag);
  126.     void (*partition_set_name) (PedPartition* part, const char* name);
  127.     const char* (*partition_get_name) (const PedPartition* part);
  128.     int (*partition_align) (PedPartition* part,
  129.                 const PedConstraint* constraint);
  130.     int (*partition_enumerate) (PedPartition* part);
  131.  
  132.     /* other */
  133.     int (*alloc_metadata) (PedDisk* disk);
  134.     int (*get_max_primary_partition_count) (const PedDisk* disk);
  135. };
  136.  
  137. struct _PedDiskType {
  138.     PedDiskType*        next;
  139.     const char*        name;
  140.     PedDiskOps* const    ops;
  141.  
  142.     PedDiskTypeFeature    features;   /* bitmap of supported features */
  143. };
  144.  
  145. /* Architecture specific operations.  i.e. communication with kernel (or
  146.  * whatever) about changes, etc.
  147.  */
  148. struct _PedDiskArchOps {
  149.     char* (*partition_get_path) (const PedPartition* part);
  150.     int (*partition_is_busy) (const PedPartition* part);
  151.     int (*disk_commit) (PedDisk* disk);
  152. };
  153.  
  154. extern void ped_register_disk_type (PedDiskType* type);
  155. extern void ped_unregister_disk_type (PedDiskType* type);
  156. extern PedDiskType* ped_disk_type_get_next (PedDiskType* type);
  157. extern PedDiskType* ped_disk_type_get (const char* name);
  158. extern int ped_disk_type_check_feature (const PedDiskType* disk_type,
  159.                            PedDiskTypeFeature feature);
  160.  
  161. extern PedDiskType* ped_disk_probe (PedDevice* dev);
  162. extern int ped_disk_clobber (PedDevice* dev);
  163. extern int ped_disk_clobber_exclude (PedDevice* dev,
  164.                      const PedDiskType* exclude);
  165. extern PedDisk* ped_disk_new (PedDevice* dev);
  166. extern PedDisk* ped_disk_new_fresh (PedDevice* dev,
  167.                     const PedDiskType* disk_type);
  168. extern PedDisk* ped_disk_duplicate (const PedDisk* old_disk);
  169. extern void ped_disk_destroy (PedDisk* disk);
  170. extern int ped_disk_commit (PedDisk* disk);
  171. extern int ped_disk_commit_to_dev (PedDisk* disk);
  172. extern int ped_disk_commit_to_os (PedDisk* disk);
  173. extern int ped_disk_check (PedDisk* disk);
  174. extern void ped_disk_print (PedDisk* disk);
  175.  
  176. extern int ped_disk_get_primary_partition_count (PedDisk* disk);
  177. extern int ped_disk_get_last_partition_num (PedDisk* disk);
  178. extern int ped_disk_get_max_primary_partition_count (const PedDisk* disk);
  179.  
  180. extern PedPartition* ped_partition_new (const PedDisk* disk,
  181.                     PedPartitionType type,
  182.                     const PedFileSystemType* fs_type,
  183.                     PedSector start,
  184.                     PedSector end);
  185. extern void ped_partition_destroy (PedPartition* part);
  186. extern int ped_partition_is_active (const PedPartition* part);
  187. extern int ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag,
  188.                           int state);
  189. extern int ped_partition_get_flag (const PedPartition* part,
  190.                           PedPartitionFlag flag);
  191. extern int ped_partition_is_flag_available (const PedPartition* part,
  192.                                      PedPartitionFlag flag);
  193. extern int ped_partition_set_system (PedPartition* part,
  194.                      const PedFileSystemType* fs_type);
  195. extern int ped_partition_set_name (PedPartition* part, const char* name);
  196. extern const char* ped_partition_get_name (const PedPartition* part);
  197. extern int ped_partition_is_busy (const PedPartition* part);
  198. extern char* ped_partition_get_path (const PedPartition* part);
  199.  
  200. extern const char* ped_partition_type_get_name (PedPartitionType part_type);
  201. extern const char* ped_partition_flag_get_name (PedPartitionFlag flag);
  202. extern PedPartitionFlag ped_partition_flag_get_by_name (const char* name);
  203. extern PedPartitionFlag ped_partition_flag_next (PedPartitionFlag flag);
  204.  
  205. extern int ped_disk_add_partition (PedDisk* disk, PedPartition* part,
  206.                    const PedConstraint* constraint);
  207. extern int ped_disk_remove_partition (PedDisk* disk, PedPartition* part);
  208. extern int ped_disk_delete_partition (PedDisk* disk, PedPartition* part);
  209. extern int ped_disk_delete_all (PedDisk* disk);
  210. extern int ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part,
  211.                     const PedConstraint* constraint,
  212.                     PedSector start, PedSector end);
  213. extern int ped_disk_maximize_partition (PedDisk* disk, PedPartition* part,
  214.                     const PedConstraint* constraint);
  215. extern PedGeometry* ped_disk_get_max_partition_geometry (PedDisk* disk,
  216.         PedPartition* part, const PedConstraint* constraint);
  217. extern int ped_disk_minimize_extended_partition (PedDisk* disk);
  218.  
  219. extern PedPartition* ped_disk_next_partition (const PedDisk* disk,
  220.                           const PedPartition* part);
  221. extern PedPartition* ped_disk_get_partition (const PedDisk* disk, int num);
  222. extern PedPartition* ped_disk_get_partition_by_sector (const PedDisk* disk,
  223.                                PedSector sect);
  224. extern PedPartition* ped_disk_extended_partition (const PedDisk* disk);
  225.  
  226. /* internal functions */
  227. extern PedDisk* _ped_disk_alloc (PedDevice* dev, const PedDiskType* type);
  228. extern void _ped_disk_free (PedDisk* disk);
  229.  
  230. extern PedPartition* _ped_partition_alloc (const PedDisk* disk,
  231.                        PedPartitionType type,
  232.                        const PedFileSystemType* fs_type,
  233.                        PedSector start,
  234.                        PedSector end);
  235. extern void _ped_partition_free (PedPartition* part);
  236.  
  237. extern int _ped_partition_attempt_align (
  238.         PedPartition* part, const PedConstraint* external,
  239.         PedConstraint* internal);
  240.  
  241. #endif /* PED_DISK_H_INCLUDED */
  242.  
  243.